package com.ht.api;


import com.ht.entity.DictModel;
import com.ht.entity.LoginUser;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;


/**
 * 底层共通业务API，提供其他独立模块调用
 */
public interface ISysBaseAPI extends CommonAPI {

    /**
     * 日志添加
     *
     * @param LogContent  内容
     * @param logType     日志类型(0:操作日志;1:登录日志;2:定时任务)
     * @param operateType 操作类型(1:添加;2:修改;3:删除;)
     */
    void addLog(String LogContent, Integer logType, Integer operateType);

    /**
     * 根据用户账号查询登录用户信息
     *
     * @param username 用户账号
     * @return 登录用户信息
     */
    LoginUser getUserByName(String username);

    /**
     * 通过用户账号查询角色集合
     *
     * @param username 用户账号
     * @return 用户所属角色List<String>
     */
    List<String> getRolesByUsername(String username);

    /**
     * 获取当前数据库类型
     *
     * @return 当前数据库类型
     * @throws SQLException 有关数据库访问错误或其他错误信息的异常
     */
    String getDatabaseType() throws SQLException;

    /**
     * 获取数据字典
     *
     * @param code 数据字典code
     * @return 数据字典对象
     */
    List<DictModel> queryDictItemsByCode(String code);

    /**
     * 查询所有的父级字典，按照create_time排序
     */
    List<DictModel> queryAllDict();

    /**
     * 获取表数据字典
     *
     * @param table 表名
     * @param text  描述
     * @param code  编码
     * @return 数据字典对象
     */
    List<DictModel> queryTableDictItemsByCode(String table, String text, String code);

    /**
     * 查询所有部门 作为字典信息 id -->value,departName -->text
     */
    List<DictModel> queryAllDepartBackDictModel();

    /**
     * 发送系统消息
     *
     * @param fromUser   发送人(用户登录账户)
     * @param toUser     发送给(用户登录账户)
     * @param title      消息主题
     * @param msgContent 消息内容
     */
    void sendSysAnnouncement(String fromUser, String toUser, String title, String msgContent);

    /**
     * 通过username得到用户的真实名称,此处为了优化审批流的username缺陷
     *
     * @param username 用户账号
     * @return 真实姓名
     */
    String getRealnameByName(String username);

    /**
     * 根据用户账号的list获取cid
     *
     * @param usernameList 用户账号的list
     * @return cid的list
     */
    List<String> getCidListByUsername(List<String> usernameList);

    /**
     * 根据用户账号获取cid
     *
     * @param username 用户账号
     * @return 用户对应cid
     */
    String getCidByUsername(String username);

    /**
     * 根据角色code获取cid
     *
     * @param roleCode 角色code
     * @return cid的list
     */
    List<String> getCidListByRoleCode(String roleCode);

    /**
     * 获取一条系统通用配置
     *
     * @return 系统通用配置中最新的一条数据
     */
    Map<String, Object> getUniqueConfig();

}
